//package com.example.demo.service;
//
//import java.io.InputStream;
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.UUID;
//
//import org.activiti.engine.HistoryService;
//import org.activiti.engine.IdentityService;
//import org.activiti.engine.RepositoryService;
//import org.activiti.engine.RuntimeService;
//import org.activiti.engine.TaskService;
//import org.activiti.engine.delegate.DelegateExecution;
//import org.activiti.engine.history.HistoricProcessInstance;
//import org.activiti.engine.impl.identity.Authentication;
//import org.activiti.engine.repository.ProcessDefinition;
//import org.activiti.engine.runtime.ProcessInstance;
//import org.activiti.engine.task.Comment;
//import org.activiti.engine.task.Task;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import com.example.demo.dao.LeaveMapper;
//import com.example.demo.dao.UserDao;
//import com.example.demo.entity.LeaveInfo;
//import com.example.demo.entity.User;
//import com.example.demo.entity.WorkflowBean;
//
//@Service("leaveService")
//public class TestLeaveService {
//
//	@Autowired
//	private LeaveMapper leaveMapper;
//	@Autowired
//	private RuntimeService runtimeService;
//	@Autowired
//	private TaskService taskService;
//	
//	@Autowired
//	private HistoryService historyService;
//	
//	@Autowired
//	private static RepositoryService repositoryService;
//	
//	@Autowired
//	private UserDao userDao;
//	
//	
//	/**
//	 * 启动流程
//	 * 
//	 */
//	public void startProcess(String bizKey) {
//		//第一个参数是指定启动流程的id,即要启动哪个流程 ;第二个参数是指业务id
//		System.out.println("启动前-----");
//		// 定义流程变量(启动时定义全局变量)
//		Map<String, Object> variables = new HashMap<String, Object>();
//		variables.put("assignee", "张三");
//
//		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess", bizKey,variables);
//		System.out.println("流程定义id：" + processInstance.getProcessDefinitionId());
//		System.out.println("流程实例id：" + processInstance.getId());
//		System.out.println("当前活动Id：" + processInstance.getActivityId());
//		System.out.println("启动之后------");
//		
//		//根据流程实例id获取任务id
//		List<Task> task = taskService.createTaskQuery().executionId(processInstance.getId()).list();
//		System.out.println("当前任务Id：" + task.get(0).getId());
//		
//		
//	}
//	
//	/**
//	 * 根据审批人id查询需要审批的任务
//	 * @param userId
//	 * @return
//	 */
//	public List<Task> findTaskByUserId(String userId) {
//		List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned(userId).list();
//		return list;
//	}
//	
//	/**
//	 * 审批
//	 * @param taskId 审批的任务id
//	 * @param userId 审批人的id
//	 * @param audit  审批意见：通过（pass）or驳回（reject）
//	 */
//	 public void completeTaskByUser(WorkflowBean workflowBean) {
//		 
//		// 任务id
//			String taskId = workflowBean.getTaskId();
//			// 批注信息
//			String comment = workflowBean.getComment();
//			// 请假单id
//			String id = workflowBean.getId();
//			// 获取流程实例id
//			Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
//			String processInstanceId = task.getProcessInstanceId();
//			
//			// 设置审批人
//			//Authentication.setAuthenticatedUserId(SessionUtil.get().getName());
//			
//			String name = userDao.findUserNameById(workflowBean.getUserId());
//			Authentication.setAuthenticatedUserId(name);
//			
//			//identityService.setAuthenticatedUserId("");
//			// 添加批注信息
//			taskService.addComment(taskId, processInstanceId, comment);
//			Map<String, Object> variables = new HashMap<>();
//			// 完成任务
//			String outcome = workflowBean.getOutcome();
//
//			if (outcome != null && !outcome.equals("默认提交")) {
//				if (outcome.equals("同意")) {
//					outcome = "pass";
//				} else {
//					outcome = "reject";
//				}
//				variables.put("audit", outcome);
//			}
//		 //1、认领任务
//		 //taskService.claim(taskId, userId);
//	        
//		//2.完成任务
//		 taskService.complete(taskId, variables);
//	 }
//	 
//	 
//	 
//	 
//	 
//	 /**
//	  * 
//	  * @param taskId
//	  * @param userId
//	  */
//	 public void initTask(String taskId,String userId) {
//		 //1、认领任务
//		 taskService.claim(taskId, userId);
//
//		 taskService.complete(taskId);
//	 }
//
//	
//	
//	/**
//	 * 查询相关的项目经理
//	 * @param execution 执行实例的代理对象 ,代表的是一个请假的具体实例
//	 * @return
//	 */
//	public List<String> findProjectManager(DelegateExecution execution) {
//		List<String> users = userDao.findByRole("1");
//		return users;
//		//return Arrays.asList("1","2");
//	}
//	
//	
//	
//	/**
//	 * 查询相关的人事经理
//	 * @param execution 执行实例的代理对象,代表的是一个请假的具体实例
//	 * @return
//	 */
//	public List<String> findHrManager(DelegateExecution execution) {
//		//return Arrays.asList("h1","h2");
//		List<String> users = userDao.findByRole("2");
//		return users;
//	}
//	
//	/**
//	 * 修改请假单的状态
//	 */
//	public void changeStatus(DelegateExecution execution,String status) {
//		
//		String key = execution.getProcessBusinessKey();
//		//LeaveInfo entity = new LeaveInfo();
//		LeaveInfo entity = leaveMapper.getById(key);
//		entity.setStatus(status);
//		leaveMapper.update(entity);
//		
//	//	System.out.println("修改请假单状态为：" + status);
//		
//	}
//	
//	/**
//	 * 根据流程id查看该流程是否结束
//	 * @param processInstanceId
//	 * @return
//	 */
//	public boolean queryProcessIsEnd(String processInstanceId){
//		
//		HistoricProcessInstance result = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
//		if(result != null && result.getStartTime() != null && result.getEndTime() != null) {
//			return true;
//		}
//		return false;
//	}
//	
//	/*public InputStream getImgStream(String taskId) {
//		BpmnModel bpmnModel = new BpmnModel();
//		ProcessDefinitionEntity entity = findProcessDefinitionEntityByTaskId(taskId);
//		//ProcessDiagramGenerator.generateDiagram
//		InputStream imageStream = ProcessDiagramGenerator.generateDiagram(entity, "png", runtimeService.getActiveActivityIds(findProcessInstanceByTaskId(taskId).getId()));
//
//		return null;
//		
//	}
//	
//	
//	*//**
//	 * 根据任务id获取流程实例
//	 * @param taskId
//	 * @return
//	 *//*
//	public ProcessInstance findProcessInstanceByTaskId(String taskId) {
//		  ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(findTaskEntityById(taskId).getProcessInstanceId()).singleResult();
//		  return processInstance;
//
//	}
//	@Autowired
//	private RepositoryService repositoryService;
//	
//	
//	*//**
//	 * 根据任务id获取流程定义
//	 * @param taskId
//	 * @return
//	 *//*
//	public ProcessDefinitionEntity findProcessDefinitionEntityByTaskId(String taskId) {
//		
//		ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(findTaskEntityById(taskId).getProcessDefinitionId());
//		return processDefinition;
//	}
//	
//	
//	*//**
//	 * 根据任务id获取任务实例
//	 * @param taskId
//	 * @return
//	 *//*
//	public TaskEntity findTaskEntityById(String taskId) {
//		return (TaskEntity) taskService.createTaskQuery().taskId(taskId).singleResult();
//	}*/
//	
//	
//	
//	
//	
//	
//	
//
//}
